package com.liuqianfei.markdown;

import java.util.List;

/**
 * 块级元素处理接口。例如多行代码块实现如下：
 *
 * <pre>
 * <code>public void emitBlock(StringBuilder out, List&lt;String&gt; lines, String meta)
 * {
 *     out.append("&lt;pre&gt;&lt;code&gt;");
 *     for(final String s : lines)
 *     {
 *         for(int i = 0; i &lt; s.length(); i++)
 *         {
 *             final char c = s.charAt(i);
 *             switch(c)
 *             {
 *             case '&amp;':
 *                 out.append("&amp;amp;");
 *                 break;
 *             case '&lt;':
 *                 out.append("&amp;lt;");
 *                 break;
 *             case '&gt;':
 *                 out.append("&amp;gt;");
 *                 break;
 *             default:
 *                 out.append(c);
 *                 break;
 *             }
 *         }
 *         out.append('\n');
 *     }
 *     out.append("&lt;/code&gt;&lt;/pre&gt;\n");
 * }
 * </code>
 * </pre>
 *
 *
 */
public interface BlockEmitter
{
    /**
     * 这个方法用作输出markdown块级元素，或者任何需要预处理的元素，例如转义带有特殊字符的HTML。
     *
     * @param out 输出的StringBuilder
     * @param lines 行列表
     * @param meta 一个样式字符串，或为空
     */
    public void emitBlock(StringBuilder out, List<String> lines, String meta);
}
